package com.ruoyi.srmcontract.mapper;

import com.ruoyi.srmcontract.domain.JacContract;

import java.util.List;
import java.util.Map;

import org.apache.ibatis.annotations.Param;

/**
 * 合同维护Mapper接口
 * 
 * @author ygx
 * @date 2020-08-04
 */
public interface JacContractMapper 
{
    /**
     * 查询合同维护
     * 
     * @param contractId 合同维护ID
     * @return 合同维护
     */
    public List<JacContract> selectJacContractById(Long contractId);
    
    /**
     * 查询合同开始时间
     * 
     * @param contractcode 合同编号
     * @return 合同开始时间
     */
    public Long selectValiDateBycode(String contractcode);


    /**
     * 查询合同维护列表
     * 
     * @param jacContract 合同维护
     * @return 合同维护集合
     */
    public List<JacContract> selectJacContractList(JacContract jacContract);
    
    /**
     * 查询需要导出到Excel的合同物料明细列表
     * 
     * @param jacContract 合同信息
     * @return 合同信息集合
     */
    public List<JacContract> selectExcelList(JacContract jacContrac);
    
    
    /**
            * 查询合同维护日志
     * 
     * @param jacContract 合同维护
     * @return 合同维护集合
     */
    public List<JacContract> selectLog(JacContract jacContract);
    
    /**
     * @param companycode 通过公司code获取公司简称
     * @return factory_type
     */
    public String selectFactoryType(String companycode);

    /**
     * 新增合同维护
     * 
     * @param jacContract 合同维护
     * @return 结果
     */
    public int insertJacContract(JacContract jacContract);
    
    /**
     * 复制合同时复制合同的相关物料明细
     * 
     * @param jacContractItem 合同物料明细
     * @return 结果
     */
    public int copyItem(JacContract jacContract);
    
    /**
     * 送签时将数据插入流程表
     * 
     * @param 送签相关信息
     * @return 结果
     */
    public int insertFlow(String jflowid, String uuid, String param, String type, String username , String crsj);

    
    /**
     * 新增合同维护
     * 
     * @param jacContract 合同维护
     * @return 结果
     */
    public String selectStatus(Long contractId);
    
    
    /**
     * 新增合同维护日志
     * 
     * @param jacContract 合同维护
     * @return 结果
     */
    public int insertJacContractLog(JacContract jacContract);
    
    /**
     * 发布、送签、确认合同时检查物料生效时间是否在合同生效、失效时间之间
     * 
     * @param jacContractCode 合同号
     * @return 不符合条件的物料清单
     */
    public List<String> checkDate(String contractCode);
    
    /**
     * 获取部门，公司code、合同类型、合同年度用于生成
     * 
     * @param contractCode 合同code
     * @return 合同状态
     */
	 public JacContract redisErpCode(String contractCode);
    
    
    /**
     * 发布时检查合同状态，只有新增，供应商拒绝，审批拒绝状态的允许发布
     * 
     * @param contractCode 合同code
     * @return 合同状态
     */
    public String checkStatus(String contractCode);
    
	/**
	 * 通过合同编号获取公司名称、采购部门名称、供应商代号、合同年度获取ERP合同号
	 * @Param 合同号
	 * @return ERP合同号
	 */
    public String  checkErpCode(String contractCode);
    
    /**
     * 根据合同id删除合同物料明细
     * 
     * @param contractid 合同ID
     * @return 结果
     */
    public int  deleteItemById(Long contractId);
    
    /**
     * 发布时检查相同公司、部门、年度、供应商所有合同内是否与当前发布合同的物料相同且生效时间也相同
     * 
     * @param contractCode 合同维护
     * @return 冲突的物料编码、名称及合同号
     */
    public List<Map<String,String>> checkItemUnique(String contractCode);
    
    /**
     * 获取ERP合同号最大的erpid
     * 
     * @param contractCode 合同维护
     * @return 冲突的物料编码、名称及合同号
     */
    public Long selectMaxErpId(String erpcontractcode);
    
    
    /**
     * 根据uuid获取合同列表
     * @param uuid
     * @return
     */
    public List<JacContract> selectCodeByUuid(String uuid);
    
    /**
     * 通过ERP合同号和物料号获取最大的erpid
     * 合同生效时，若插入的ERP合同号下该物料不存在则获取最大erpid，并在该id上加1
     * @param contractCode 合同维护
     * @return 冲突的物料编码、名称及合同号
     */
    public Long selectItemErpId(@Param("erpcontractcode") String erpcontractcode, @Param("itemcode") String itemcode);
    
    /**
     * 通过ERP合同号和物料号获取最大的erpnum
     * 合同生效时，若插入的ERP合同号下该物料不存在则获取最大erpid，并在该id上加1
     * @param contractCode 合同维护
     * @return 冲突的物料编码、名称及合同号
     */
    public Long selectMaxErpNum(@Param("erpcontractcode") String erpcontractcode, @Param("itemcode") String itemcode);
    

    

    /**
     * 修改合同维护
     * 
     * @param jacContract 合同维护
     * @return 结果
     */
    public int updateJacContract(JacContract jacContract);
    
    /**
     * 通过合同号，获取合同中每条物料明细的未税和总金额之和，并更新到合同表的未税金额和合同金额
     * 
     * @param contractcode 合同号
     * @return 结果
     */
    public int updateAmount(String contractcode);
    
    /**
     * 修改合同状态
     * 
     * @param jacContract 合同维护
     * @return 结果
     */
    public int updateContractStatus(JacContract jacContract);
    

    /**
     * 删除合同维护
     * 
     * @param contractId 合同维护ID
     * @return 结果
     */
    public int deleteJacContractById(Long contractId);

    /**
     * 批量删除合同维护
     * 
     * @param contractIds 需要删除的数据ID
     * @return 结果
     */
    public int deleteJacContractByIds(String[] contractIds);
    
    /**
     * 根据用户id获取用户name
     * @return
     */
    public String selectUserNameById(String userId);
    
    /**
     * 根据参数类型获取参数值（比如传入参数类型ContractYear 获取定义的合同年份）
     * @param paramtype
     * @return
     */
    public String[] getContractyear(String paramtype);
    
}
